package plugins

import AfterAnalyzable
import Config
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths

/**
 * 归档插件类，用于在分析完成后将今天的文件归档到特定目录
 */
class Archiving : AbstractAfterAnalyzable() {
    private val config = Config

    companion object {
        private const val ARCHIVING_DIR_NAME: String = "归档" // 定义归档目录的名称
    }

    /**
     * 在分析完成后执行归档操作
     *
     * @param origin 原始输入字符串，归档操作完成后返回
     * @return 返回原始输入字符串
     */
    override fun afterAnalyze(origin: String): String {
        val todayFilePath: Path = Paths.get(config.FILE_PATH.toString(), config.getTodayFileName()) // 获取今天文件的路径
        val archivingDirPath: Path = Paths.get(config.FILE_PATH.toString(), ARCHIVING_DIR_NAME) // 获取归档目录的路径
        val archivingDir: File = archivingDirPath.toFile() // 将归档目录路径转换为File对象
        val archivingFilePath =
            Paths.get(archivingDirPath.toString(), config.getTodayFileName()) // 获取归档后文件的路径
        if (!archivingDir.exists()) {
            archivingDir.mkdir() // 如果归档目录不存在，则创建它
        }
        if (!todayFilePath.toFile().exists()) {
            log.info("没有找到文件: $todayFilePath, 跳过\"${this.getPluginName()}\"插件执行") // 如果今天文件不存在，则打印信息并返回原始输入
            return origin;
        }
        if (archivingFilePath.toFile().exists()) {
            log.info("文件已存在: $archivingFilePath, 删除旧文件") // 如果归档文件已存在，则删除旧文件
            Files.delete(archivingFilePath)
        }
        Files.move(todayFilePath, archivingFilePath) // 将今天文件移动到归档目录
        return origin // 返回原始输入
    }

    /**
     * 获取插件执行的顺序，顺序值越大执行越晚
     *
     * @return 返回插件执行顺序
     */
    override fun getOrder(): Int {
        return 100;
    }

    /**
     * 获取插件的名称
     *
     * @return 返回插件名称
     */
    override fun getPluginName(): String {
        return "归档插件"
    }
}
